Alex7wrt Опубликовано 9 февраля, 2016 Поделиться Опубликовано 9 февраля, 2016 (изменено) Здравствуйте. Интересует, как выставить в TMemo вертикальное выравнивание текста по центру. В ObjectInspector этого свойства нет. В RunTime оно есть, но не работает. StyledSettings сброшены, при TextSettings.VertAlign:=TTextAlign.Center; текст все равно выравнивается по верху. Изменено 12 февраля, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Error Опубликовано 9 февраля, 2016 Поделиться Опубликовано 9 февраля, 2016 (изменено) Нельзя. Что логично - не известна высота текста заранее, т.к. количество строк в TMemo зависит от многих факторов и далеко не всегда равно TMemo.Lines.Count. Если бы свойство работало, то memo пересчитывало бы все после каждого введенного символа, что сделало бы его еще более тормозным. Изменено 9 февраля, 2016 пользователем Error Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 10 февраля, 2016 Автор Поделиться Опубликовано 10 февраля, 2016 Думаю, все же должен быть какой-то способ. Может быть и программный. Цитата Ссылка на комментарий
0 Error Опубликовано 10 февраля, 2016 Поделиться Опубликовано 10 февраля, 2016 Предусмотренного разработчиками FMX способа точно нет, а вам зачем это надо? Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 12 февраля, 2016 Автор Поделиться Опубликовано 12 февраля, 2016 (изменено) По клику на TText, в котором текст центрован по вертикали, этот текст отображается в TMemo и его можно редактировать. Вот здесь желательно, чтобы и в TMemo тоже текст был центрован по вертикали, чтобы внешний вид текста совпадал. Я вот думаю, если в TMemo нельзя отцентровать текст во вертикали, то может быть выбрать у него Align = VertCenter по отношению к родителю. И при появлении новой строки увеличивать высоту TMemo на высоту строки. Но это подойдет при свойстве WordWrap = False. Если же оно True, то количество строк в Tmemo так не узнаешь. А мне бы хотелось, чтобы WordWrap было активно. В старой версии FMX было свойство GetPositionPoint(ACaretPos : TCaretPosition): TPointF для определения координат любого символа, но в новых его нет. Поэтому вот не знаю, как решить вопрос с центровкой по вертикали. UPD. Только что заметил, что даже при WordWrap=False слова все равно переносятся на новую строку при достижении границ TMemo. И новая Line при этом не добавляется. Поэтому вышеописанный способ с WordWrap=False не сработает. Изменено 12 февраля, 2016 пользователем Alex7wrt Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 12 февраля, 2016 Автор Поделиться Опубликовано 12 февраля, 2016 (изменено) Нашел немного похожий вопрос на http://stackoverflow.com/questions/21836579/can-i-make-a-tmemo-size-itself-to-the-text-it-contains-firemonkey Используя код определения высоты TMemo: function get_memo_height(amemo:tmemo):single; var i:integer; astring: string; layout: ttextlayout; begin Layout := TTextLayoutManager.DefaultTextLayout.Create; astring:=''; for i:=0 to amemo.lines.count-1 do astring:=astring+amemo.lines[i]+chr(10); Layout.BeginUpdate; Layout.Text :=astring; Layout.WordWrap:= amemo.wordwrap; Layout.HorizontalAlign:= amemo.TextAlign; Layout.MaxSize:= PointF(amemo.width,maxint); Layout.VerticalAlign := TTextAlign.Leading; Layout.Font := amemo.Font; Layout.TopLeft := pointf(0,0); Layout.EndUpdate; result:=layout.textrect.bottom-amemo.Font.Size;; Layout.free; end; Memo.Height:=get_memo_height(Memo); в сочетании с Memo.Align:= TAlignLayOut.VertCenter; Получаем эффект выравнивания текста Memo по центру вертикали родительского контрола Изменено 12 февраля, 2016 пользователем Alex7wrt enatechno 1 Цитата Ссылка на комментарий
Вопрос
Alex7wrt
Здравствуйте.
Интересует, как выставить в TMemo вертикальное выравнивание текста по центру. В ObjectInspector этого свойства нет. В RunTime оно есть, но не работает. StyledSettings сброшены, при
текст все равно выравнивается по верху.
Изменено пользователем Alex7wrtСсылка на комментарий
5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.